/**
 * 逻辑系统示例
 * 
 * 展示如何在逻辑系统中使用命令队列与渲染系统通信
 * 
 * @author AI Assistant
 * @date 2025-11-26
 */

import { ecs } from "../../../core/ecs/ECS";
import { LogicCmd, CommandPriority } from "../command";
import { ViewComponent } from "../component/ViewComponent";

/**
 * 示例逻辑系统
 * 
 * 职责：
 * 1. 处理游戏逻辑（移动、战斗、AI 等）
 * 2. 更新组件数据
 * 3. 通过命令队列发送渲染指令
 */
export class LogicSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate {
    
    /**
     * 过滤器：处理有 ViewComponent 的实体
     */
    filter(): ecs.IMatcher {
        return ecs.allOf(ViewComponent);
    }
    
    /**
     * 初始化系统
     */
    init(): void {
        console.log('[LogicSystem] ✅ 逻辑系统初始化');
    }
    
    /**
     * 更新逻辑（每帧调用）
     */
    update(entity: ecs.Entity): void {
        // 示例：简单的往返移动
        // 实际项目中，这里应该是您的游戏逻辑
        
        // 在实际使用时，您可能有以下组件：
        // const pos = entity.get(PositionComponent);
        // const vel = entity.get(VelocityComponent);
        // 
        // // 更新逻辑数据
        // pos.x += vel.x * this.dt;
        // pos.y += vel.y * this.dt;
        // 
        // // 发送渲染命令
        // LogicCmd.setPosition(entity.eid, pos.x, pos.y);
    }
    
    /**
     * 系统销毁
     */
    onDestroy(): void {
        console.log('[LogicSystem] 🛑 逻辑系统销毁');
    }
}

/**
 * 导出逻辑系统实例
 */
export const logicSystem = new LogicSystem();
